/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.siagefi.service;


import br.siagefi.dao.DAO;
import br.siagefi.model.Banco;
import br.siagefi.model.ContaBancaria;
import br.siagefi.model.Lancamento;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

/**
 *
 * @author NOTE
 */

public class ContaBancariaService {
    private final DAO<ContaBancaria> dao;

    public ContaBancariaService() {
        this.dao = new DAO<>(ContaBancaria.class);
    }
    
    public void inserir(ContaBancaria conta){
        dao.adiciona(conta);
    }
    
    public void alterar(ContaBancaria conta){
        dao.atualiza(conta);
    }
    
    public List<ContaBancaria> listar(){
        return dao.listaTodos();
    }
    
    public void remover(ContaBancaria conta){
        dao.remove(conta);
    }

    public boolean jaExiste(ContaBancaria conta) {
        List<ContaBancaria> lista = this.listar();
        for (ContaBancaria c : lista) 
            if(c.equals(conta))
                return true;
        return false;
    }

    public boolean existeLancamentoVinculado(ContaBancaria conta) {
         return !(conta.getLancamentos().isEmpty());
    }
    
    public List<ContaBancaria> consultaContasPorBanco(Banco banco){
        return dao.consultar("Conta.buscaPorBanco", banco);
    }

    public boolean existeLancamentoVinculadoAVencer(ContaBancaria conta) {
        List<Lancamento> lista = conta.getLancamentos();
        Date dataAtual = Calendar.getInstance().getTime();
        for (Lancamento l : lista) {
            if(l.getDataPagamento().compareTo(dataAtual) >= 0 ){
                return true;
            }
        }
        return false;
    }
    
}
